import type { App } from 'vue'
import { ElMessage } from 'element-plus'

// 错误处理
export const setupErrorHandler = (app: App) => {
  // Vue错误处理
  app.config.errorHandler = (err: unknown, instance, info) => {
    // eslint-disable-next-line no-console
    console.error('Vue错误:', err, info)
    
    // 开发环境显示详细错误
    if (import.meta.env.DEV) {
      ElMessage.error(`Vue错误: ${err instanceof Error ? err.message : String(err)}`)
    } else {
      ElMessage.error('系统错误，请稍后重试')
    }
  }

  // 全局未捕获的Promise错误
  window.addEventListener('unhandledrejection', (event) => {
    // eslint-disable-next-line no-console
    console.error('未处理的Promise错误:', event.reason)
    
    // 阻止默认行为（控制台错误）
    event.preventDefault()
    
    // 显示用户友好的错误信息
    if (import.meta.env.DEV) {
      ElMessage.error(`Promise错误: ${event.reason}`)
    } else {
      ElMessage.error('网络错误，请稍后重试')
    }
  })

  // 全局JavaScript错误
  window.addEventListener('error', (event) => {
    // eslint-disable-next-line no-console
    console.error('JavaScript错误:', event.error)
    
    // 阻止默认行为（控制台错误）
    event.preventDefault()
    
    // 显示用户友好的错误信息
    if (import.meta.env.DEV) {
      ElMessage.error(`JavaScript错误: ${event.error?.message || '未知错误'}`)
    } else {
      ElMessage.error('系统错误，请刷新页面重试')
    }
  })
}
